1 基本操作

1.1 仓库生成

1
2
git init [DIR-NAME] //将当前目录,或者指定的DIR-NAME目录初始化为仓库
git clone REPOSITORY-URL [DIR-NAME] //将远端工程放入当前目录,或者重命名为指定的DIR-NAME的目录

1.2 分支操作

1
2
3
4
5
6
7
git branch 显示本地分支,-r 显示远程分支 -a 显示所有分支
git branch NEW-BRANCH 以当前分支为基础创建一个分支
git branch NEW-BRANCH BASE-BRANCH 以BASE-BRANCH为基础创建一个分支
git checkout -b NEW-BRENCH 以当前分支为基础创建一个分支
git checkout -b NEW-BRANCH BASE-BRANCH 以BASE-BRANCH为基础创建一个分支
git checkout BRANCH-NAME 切换到分支
git branch -d BRANCH-NAME 删除BRANCH-NAME指定的分支(如果要删除的分支有内容未合并到当前分支,不能删除) -D表示无条件删除

1.3 内容整合

1
2
3
4
git fetch [REPOSITORY-URL REMOTE-BRANCH] 取回远端分支内容
git merge ANOTHER-BRANCH 将ANOTHER-BRANCH的内容合并到当前分支
git pull [REPOSITORY-URL REMOTE-BRANCH:LOCAL-BRANCH] 将远端分支的内容取回并尝试合并
git mergetool 使用合并工具进行合并

1.4 内容提交

1
2
3
4
5
git status  查看当前改动提交状态
git diff 对比工作区和暂存区,--cached 为比较暂存区和HEAD
git add . 添加所有改动到git 跟踪,指定FILEPATH则只添加指定内容
git commit -m "commit log" 提交所有改动到本地仓库, --amend 表示调整上一次提交
git push [REPOSITORY-URL LOCAL-BRANCH:REMOTE-BRANCH] 推动本地仓库信息到远端仓库

2 使用实践

2.1 当前工作未完成,临时切换到其他分支

1
2
3
4
5
git stash 暂存当前未提交的内容
git stash save "stash log" 暂存内容并提供描述信息
git stash pop 将最后一个暂存的内容取出
git stash list 查看所有暂存
git stash pop [stash@{n}] 取出一个特定的暂存

2.2 查找某处变更是哪次提交生成的(bug是谁在什么时候写的~)

2.2.1 方法一
1
git blame FILE-NAME -L m,n 查看m到n行之间的最后一次变更的信息
2.2.2 方法二
1
git log -L m,n:FILE-NAME 	查看文件的m到n行之间的变化
2.2.3 方法三
1
2
3
4
git bisect start 开始一个二分查找
git bisect bad COMMIT-ID 设置一个已经出问题的版本
git bisect good COMMIT-ID 设置一个没有问题的版本
git bisect good|bad 持续的给结果,最后会定位到一个版本,结果跟方法二的类似
2.2.4 方法四
1
git show :/KEY-WORD 查找关键信息的变更,这里给出的是一个大致信息,比如是在其他分支做出的改动
2.2.5 方法五
1
git log -p -S "字符串" 查找字符串在整个提交历史的出现, -G "正则表达式"

2.2 查看文件的历史 包括被删除的文件

1
2
3
git log -- FILE_NAME
git log --diff-filter=D --summary | grep FILE_NAME -C 5
git log --follow --graph --summary -- FILE_NAME

2.3 检查当前分支内容是否包含了最新的主干内容

1
2
git cherry origin/master origin/BRANCH_NAME
git log origin/master ^origin/BRANCH_NAME –oneline

3 修改历史

  • 版本信息的引用

    • 相对一个版本 比如 HEAD^
    • 相对N个版本 比如 HEAD@{10}
    • 相对N个版本 比如 HEAD~10
    • 相对N个版本 比如 HEAD@{5}^~5
  • 版本区间

    • A..B, A不可达&&B可达的的范围,如果是同一条主线上,则是前开后闭区间,否则视情况而定
    • ^A B 等同于 A..B
    • B —not A 等同于 A..B
    • A…B A可达&&B可达除掉AB都可达的范围,前后闭区间

3.1 修改已经提交的log信息

3.1.1 修改上次的log
1
2
git commit --amend
git push -f 谨慎谨慎,只有提交了远端仓库才需要这个
3.1.2 合并上几次的log,原来五条
1
2
3
git reset HEAD^^~3 在当前分支回退五个版本的提交历史
git commit -m "combined commit"
git push -f git push -f 谨慎谨慎,只有提交了远端仓库才需要这个

3.2 修改提交内容的历史

  • 现有的版本A,B,C,D,E
  • 删掉C的提交内容
3.2.1 使用revert
1
git revert C 简单,但会增加一次提交,而且C原来的提交也会留在历史中
3.2.2 使用rebase
1
git rebase -i B  删掉想要删掉的C提交,然后保存
3.2.3 使用cherry-pick
1
2
3
git checkout B 先切到D之前的提交
git cherry-pick C..E 将后面的提交再拉进来
git checkout -b xxx 放入新的分支中

4 参考资料

  1. git docs
  2. git docs
  3. Pro Git 2nd
  4. git community book中文
  5. Git - Tutorial
  6. 《Git权威指南》
  7. 《版本控制之道-使用Git》
  8. git 相关书籍
  9. github漫游指南
  10. github漫游指南
  11. github秘籍
  12. git工作流指南
  13. github help
  14. 怎样使用github
  15. github使用指南
  16. github中fork和更新原作者变更

最后更新: 2022年03月02日 03:32

原始链接: http://rawbin-.github.io/dev-tools/git/2016-01-18-git-commands/

× 赞赏这个人~
打赏二维码